import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.URL;
import java.util.LinkedList;

import javax.imageio.ImageIO;
import javax.swing.JPanel;


public class MainScreen extends JPanel //패널 상속
					implements Runnable{//스레드 구현
	public Image backgroundImage,characterImage,expleosionImage,
				 botImage,botmoveImage; //이미지 멤버 변수 생성
	public Character character;// 캐릭터 멤버 변수생성
	public final int SPEED = 20;
	
	LinkedList<Bot> bot = new LinkedList<Bot>(); //bot 다량 생성을 위한 링크드리스트 준비
	long prevBotTime = 1000;
	final int BotSpeed = 510;
	
	//폭발 이미지!!
	LinkedList<Expleosion> expleosion = new LinkedList<Expleosion>();
	
	
	public MainScreen(){//생성자입니다
		try{//그림파일 생성시 예외처리
			
			//Background 이미지 설정
			URL ur1 = getClass().getResource("map.png");
			Image originalImage = ImageIO.read(ur1);
			//백그라운드 이미지의 사이즈를 맞추기위해 getScaledInstance합니당
			backgroundImage = originalImage.getScaledInstance
					(1200, 600, Image.SCALE_SMOOTH);
			
			//Character 이미지 설정
			ur1 = getClass().getResource("character.png");
			originalImage = ImageIO.read(ur1);
			//백그라운드 이미지의 사이즈를 맞추기위해 getScaledInstance합니당
			characterImage = originalImage.getScaledInstance
					(100, 100, Image.SCALE_SMOOTH);
			
			//Bot 이미지 설정
			ur1 = getClass().getResource("bot.png");
			originalImage = ImageIO.read(ur1);
			botImage = originalImage.getScaledInstance(40, 40, Image.SCALE_SMOOTH);
			
			//Expleosion 이미지 설정
			ur1 = getClass().getResource("Expleosion.png");
			originalImage = ImageIO.read(ur1);
			expleosionImage = originalImage.getScaledInstance(100, 100, Image.SCALE_SMOOTH);
			
//			//Botmove 이미지 설정
//			ur1 = getClass().getResource("bootmoove.png");
//			originalImage = ImageIO.read(ur1);
//			botmoveImage = originalImage.getScaledInstance(40, 40, Image.SCALE_SMOOTH);
			
		}catch(Exception e){
			e.printStackTrace(); //오류를 보기위한 처리
		}
		
		character = new Character(characterImage,500,470);//이미지 객체 생성
		
		//키보드 이벤트 수신기
		this.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				super.keyPressed(e);
				character.keyPressedHandler(e);
			}
			@Override
			public void keyReleased(KeyEvent e) {
				super.keyReleased(e);
				character.keyReleasedHandler(e);
			}
		});
		
		Thread thread = new Thread(this); //스레드 객체 생성
		thread.start(); //run 메서드 호출
	}
	
	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
	
		
		g.drawImage(backgroundImage, 0, 0, null);
		
		character.Rander(g);// Rander 메서드 호출!!
		
		for(Bot bot : this.bot){ //중복해서 봇 이미지 출력
			bot.Render(g);
		}
		
		for(Expleosion ex : this.expleosion){
			ex.render(g);
		}

	}

	@Override
	public void run() {
		while(true){//무한루프
			character.update(); //캐릭터 클래스 update메서드 호출
			
			for(int i= this.bot.size()-1; i>=0; i--){ //적 무한생성
				Bot bot = this.bot.get(i);
				bot.update();
				if(bot.active==false){
					this.bot.remove(bot);
				}
			}
			
			

			//1초마다 한번씩 Enermy를 생성합니당 몬스터 생성!!!!!!!!!!!!1
			long currentTime = System.currentTimeMillis();//현재시간을 1970,1월,1일로부터몇밀리세컨드로환산
			if(prevBotTime/*1000*/ + BotSpeed/*0*/ < currentTime){
				Bot bot = new Bot(botImage);
				bot.active = true;
				this.bot.add(bot);
				prevBotTime = currentTime;
			}
			//화면갱신
			repaint();
			try{
				Thread.sleep(SPEED);
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
}
